/*
  将下面异步代码使用 Promise 的方法改进
  尽量用看上去像同步代码的方式
  setTimeout(function () {
    var a = 'hello'
    setTimeout(function () {
      var b = 'lagou'
      setTimeout(function () {
        var c = 'I ♥ U'
        console.log(a + b +c)
      }, 10)
    }, 10)
  }, 10)
*/

/**
 *
 * 异步方法的抽象
 * @param {*} str 带传入参数
 * @param {*} delay 延迟时间
 * @returns
 */
function asyncFun(str, delay) {
  return new Promise((resolve, reject) => {
    try {
      setTimeout(() => {
        resolve(str);
      }, delay);
    } catch (e) {
      reject(e);
    }
  });
}

// 执行主函数
function main() {
  // 将事件插入队列
  const eventList = [
    asyncFun("hello", 10),
    asyncFun("lagou", 10),
    asyncFun("I ♥ U", 10),
  ];

  // 将多个函数的调用以Promise.all实现,保证按顺序执行
  Promise.all(eventList)
    .then((res) => {
      let r = res.join("");
      console.log(r);
    })
    .catch((e) => {
      console.log(e);
    });
}

main();
